<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>XiunoPHP 开发手册</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta name="keywords" content="XiunoPHP 开发手册" />
	<meta name="description" content="XiunoPHP 开发手册 " />
	<meta name="generator" content="Xiuno BBS" />
	<meta name="author" content="Xiuno Team" />
	<meta name="copyright" content="2008-2012 xiuno.com" />
	<meta name="MSSmartTagsPreventParsing" content="True" />
	<meta http-equiv="MSThemeCompatible" content="Yes" />
	<link href="common.css" type="text/css" rel="stylesheet" />
</head>

<body class="bg1">
	<div class="width big">
		
		<h1>XiunoPHP 核心类 core/misc.class.php</h1>
		<p>这个类也是 XiunoPHP 的核心类，提供了许多常用的静态方法（可以当做函数使用）。</p>
		<p>您可以在 control, model, 任意地方调用这些静态方法。</p>
		<p>方法列表：</p>
		<ol>
			<li><b>misc::page</b>($key = 'page') 实例：
<pre>
	// 从URL中获取 page参数，基本等价于 $page = $_GET['page']; 加入了范围的判断。
	// 比如：http://www.domain.com/?blog-list-page-123.htm
	$page = misc::page();
	
	// 指定 page 参数：http://www.domain.com/?blog-list-threadpage-123.htm
	$page = misc::page('threadpage');
</pre>
			</li>
			
			
			<li><b>misc::pages</b>($url, $totalnum, $page, $pagesize = 20) 实例：
<pre>
	// 返回翻页的HTML源代码，格式如：
	/*
		&lt;a href="?thread-index-page-1.htm"&gt;1&lt;/a&gt;
		&lt;b&gt;2&lt;/b&gt;
		&lt;a href="?thread-index-page-3.htm"&gt;3&lt;/a&gt;
	*/
	misc::pages('?thread-index.htm', 100, 1, 20);
	misc::pages('thread-index.htm', 100, 1, 20);
	misc::pages('index.php', 100, 1, 20);
	misc::pages('index.php?a=b', 100, 1, 20);
</pre>
			</li>
			
			
			<li><b>misc::simple_pages</b>($url, $totalnum, $page, $pagesize) 实例：
<pre>
	// 返回简单翻页的源代码（仅包含上一页，下一页），格式如：
	/*
		&lt;a href="?thread-index-page-1.htm"&gt;1&lt;/a&gt;
		&lt;a href="?thread-index-page-3.htm"&gt;下一页&lt;/a&gt;
	*/
	misc::simple_pages('?thread-index.htm', 100, 1, 20);
	misc::simple_pages('thread-index.htm', 100, 1, 20);
	misc::simple_pages('index.php', 100, 1, 20);
	misc::simple_pages('index.php?a=b', 100, 1, 20);
</pre>
			</li>
			
			
			<li><b>misc::setcookie</b>($key, $value, $time = 0, $path = '', $domain = '', $httponly = FALSE) 实例
<pre>
	misc::setcookie('auth', 'abc', time() + 3600, '/', '.');
</pre>
			</li>
			
			
			<li><b>misc::form_hash</b>($auth_key) 实例：
<pre>
	// 返回一个实效大概在 三个小时 的 HASH 值
	$s = misc::form_hash('abcdefg');
</pre>
			</li>
			
			
			<li><b>misc::form_submit</b>($auth_key) 实例：
<pre>
	// 校验 FORM_HASH 是否合法
	$bool = misc::form_submit('abcdefg');
</pre>
			</li>
			
			
			<li><b>misc::get_url_path</b>() 实例：
<pre>
	// 返回当前的URL路径，结果类似：http://www.domain.com/bbs/
	misc::get_url_path();
</pre>
			</li>
			
			
			<li><b>misc::get_script_uri</b>() 实例：
<pre>
	// 返回当前的URL路径，结果类似：http://www.domain.com/bbs/index.php?a=b&c=d
	misc::get_script_uri();
</pre>
			</li>
			
			
			<li><b>misc::minidate</b>($time) 实例：
<pre>
	// 返回短时间表示格式，结果类似于：
	// 2012-12
	// 12-1
	// 11:30
	misc::minidate(time() + 3600);
</pre>
			</li>
			
			
			<li><b>misc::humandate</b>($time) 实例：
<pre>
	// 返回人性化的时间表示格式，结果类似于：
	// 1分钟前
	// 三天前
	misc::humandate(time() + 3600);
</pre>
			</li>
			
			
			<li><b>misc::humannumber</b>($num) 实例：
<pre>
	// 返回人性化的数字表示格式，结果类似于：
	// 12万
	misc::humannumber(120000);
</pre>
			</li>

	<li><b>misc::humansize</b>($num) 实例：
<pre>
	// 字节转换，结果类似于：
	// 1610612736  => 1.5G
	// 1048576 => 1M
	misc::humansize(1610612736);
</pre>
			</li>
			
		<li><b>misc::mid</b>($n, $min, $max) 实例：
<pre>
	// 字节转换，结果类似于：
	// 1610612736  => 1.5G
	// 1048576 => 1M
	misc::mid(1610612736);
</pre>
		</li>
				
		<li><b>misc::array_to_urladd</b>($arr) 实例：
<pre>
	// 数组格式化成url格式：
	// array('a'=>'b', 'c'=>'d') => a-b-c-d
	misc::array_to_urladd(array('arr'=>123));
</pre>
		</li>
		
		<li><b>misc::arrlist_key_values</b>($arrlist, $key, $value) 实例：
<pre>
	// 从一个二维数组中取出一个 key=>value 格式的一维数组：
	misc::arrlist_key_values($arrlist, $key, $value);
</pre>
		</li>	
			
		<li><b>misc::arrlist_values</b>($arrlist, $key) 实例：
<pre>
	// 从一个二维数组中取出一个 values() 格式的一维数组，某一列key：
	misc::arrlist_values($arrlist, $key);
</pre>
		</li>
		
		<li><b>misc::arrlist_change_key</b>(&$arrlist, $key) 实例：
<pre>
	// 将 key 更换为某一列的值，在对多维数组排序后，数字key会丢失，需要此函数：
	misc::arrlist_change_key(&$arrlist, $key);
</pre>
		</li>
			
		<li><b>misc::arrlist_multisort</b>(&$arrlist, $col, $asc = TRUE) 实例：
<pre>
	/* 
		对多维数组排序
		$data = array();
		$data[] = array('volume' => 67, 'edition' => 2);
		$data[] = array('volume' => 86, 'edition' => 1);
		$data[] = array('volume' => 85, 'edition' => 6);
		$data[] = array('volume' => 98, 'edition' => 2);
		$data[] = array('volume' => 86, 'edition' => 6);
		$data[] = array('volume' => 67, 'edition' => 7);
	*/
	misc::arrlist_multisort($data, 'edition', TRUE);
</pre>
		</li>	
		
		<li><b>misc::key_str_merge</b>($haystack, $needle) 实例：
<pre>
	/*
		功能：将两个以空格隔开的字符串合并
		实例：echo str_merge('a b c', 'a1 a2');
		结果：a b c a1 a2
	*/
	misc::key_str_merge('a b c', 'a1 a2');
</pre>
		</li>
		
		<li><b>misc::key_str_strip</b>($haystack, $needle) 实例：
<pre>
	/*
		功能：将字符 $s2 从 $haystack 中去掉
		实例：echo key_str_strip('a b c', 'a b');
		结果：c
	*/
	misc::key_str_strip('a b c', 'a b');
</pre>
		</li>
		
		<li><b>misc::in_key_str</b>($needle, $haystack) 实例：
<pre>
	/*
		功能：判断字符串 $needle 是否在 $haystack 中
	*/
	misc::in_key_str($needle, $haystack);
</pre>
		</li>
		
		<li><b>misc::safe_str</b>($s, $ext = '') 实例：
<pre>
	/*
		功能：安全过滤，过滤掉所有特殊字符，仅保留英文下划线，中文。其他语言需要修改U的范围
	*/
	misc::safe_str($s, $ext = '');
</pre>
		</li>
		
		<li><b>misc::implode</b>($glue1, $glue2, $arr) 实例：
<pre>
	/*
		功能：增强版本的 implode(), 支持两个分隔符
		implode('=', '&', ('a'=>'a1', 'b'=>'b1'))
		a=a1&b=b1
	*/
	misc::implode('=', '&', ('a'=>'a1', 'b'=>'b1'));
</pre>
		</li>
		
		<li><b>misc::is_robot</b>() 实例：
<pre>
	// 判断是否为搜索引擎
	misc::is_robot();
</pre>
		</li>
		
		<li><b>misc::is_writable</b>($file) 实例：
<pre>
	// 判断目录是否可写
	misc::is_writable('/data/');
</pre>
		</li>
		
		<li><b>misc::scandir</b>($dir) 实例：
<pre>
	// 扫描目录，获取目录下的 file, dir 列表
	misc::scandir('/data/');
</pre>
		</li>
		
		
		<li><b>misc::rmdir</b>($dir) 实例：
<pre>
	// 功能：递归删除目录
	misc::rmdir('/data/');
</pre>
		</li>
		
		
			
		</ol>
		
	</div>
	<br />
	<br />
	<br />
</body>
</html>
